// ProjectName: go-learn-demo
// PackageName: _4_log
// Description:
// Author: hy.bai
// Date: 2025-08-03 18:59

package ybxblog

import (
	"fmt"
	"log"
	"os"
	"time"
)

func init() {
	// 设置日志的格式。默认的日志格式是：Ldate | Ltime
	log.SetFlags(log.Lshortfile | log.Ldate | log.Ltime)
}

func TestBasicLog() {
	log.Println("这是一条很普通的日志。")
	v := "格式化后"
	log.Printf("这是一条%s日志。\n", v)
	// log.Panicln("这是一条会触发panic的日志。")
	// log.Fatalln("这是一条会触发fatal的日志。")
}

func TestFatal() {
	log.Println("这是一条很普通的日志。")
	log.Fatalln("这是一条会触发fatal的日志。")
	fmt.Println("这是fatal日志后面的代码") // 代码不会执行，因为在Fatalln方法中调用了os.Exit方法,会退出程序

}

func TestPanic() {
	log.Println("这是一条很普通的日志。")
	message := "panic异常信息"
	log.Panicln(message) // 触发panic异常
}

func TestLogFlags() {
	// 设置日志的格式。默认的日志格式是：Ldate | Ltime
	log.SetFlags(log.Lshortfile | log.Ldate | log.Ltime)

	log.Println("这是一条测试的日志。")
	v := "格式化后"
	log.Printf("这是一条%s日志。\n", v)
}

func TestLogPrefix() {
	log.Println("这是一条测试的日志。")
	log.SetPrefix("[哈哈哈]")
	v := "格式化后"
	log.Printf("这是一条%s日志。\n", v)
}

func TestLogOutFile() {
	currentTime := time.Now().Format(time.DateOnly)
	// currentTime := time.Now().Format(time.DateTime)
	fileName := fmt.Sprintf("E:\\systemFile\\admin\\Downloads\\log-%s.log", currentTime)
	logFile, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	if err != nil {
		log.Fatalf("打开日志文件失败,原因是:%v\n", err)
	}
	// SetOutput方法的作用设置日志的输出目的地。默认是：os.Stdout
	log.SetOutput(logFile)
	log.Println("这是一条测试的日志。")
	log.SetPrefix("[哈哈哈]")
	v := "格式化后"
	log.Printf("这是一条%s日志。\n", v)
}

func TestNewLog() {
	// 手动创建logger对象
	logger := log.New(os.Stdout, "[哈哈哈]", log.Ldate|log.Ltime|log.Lshortfile)
	logger.Println("这是一条测试的日志。")
	v := "格式化后"
	logger.Printf("这是一条%s日志。\n", v)
}
